package com.mhkj.common.util;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.net.URLDecoder;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;

import javax.activation.MimetypesFileTypeMap;


/**
 * 附件信息-值对象
 * 
 * @author 曹铁诚
 * @date 2016年5月24日 16:02:08
 */
public class FileInfo {
	// 属性
	private String file_id; // 附件ID
	private String file_name; // 附件名称
	private String mime_type; // 文件mime类型
	private long doc_size; // 文件大小
	private String content_type; // 文档类型
	private byte[] blob_content; // 文档内容
	private File file; // 附件内容

	/**
	 * 构造函数
	 */
	public FileInfo(Map<String, Object> fileMap) {
		try {
			// 文件夹路径：uploadFiles/用户/年月日
			String classPath = this.getClass().getResource("/").getPath(); // class路径
			String ctxPath = new File(classPath).getParentFile().getParentFile().getPath(); // 上下文路径
			ctxPath = URLDecoder.decode(ctxPath, "utf-8");// 解决windows服务器下文件目录中含有空格的问题
			System.out.println("FileInfo-ctxPath===" + ctxPath);
			String yMd = new SimpleDateFormat("yyyyMMdd").format(new Date()); // 年月日
			String folderPath = ctxPath + File.separator + "upload" + File.separator  + File.separator + yMd + File.separator;
			System.out.println("FileInfo-folderPath===" + folderPath);
			// 赋值
			this.file_id = fileMap.get("fileId").toString(); // 附件ID
			this.file_name = fileMap.get("fileName").toString(); // 附件名称
			this.content_type = file_name.substring(file_name.lastIndexOf(".") + 1); // 文档类型
			// 根据fileId获取文件
			String filePath = folderPath + file_id + "." + content_type; // 文件路径
			File file = new File(filePath); // 文件
			this.file = file; // 附件内容
			this.blob_content = this.getBytes(); // 文件内容
			// 文件mime类型
			this.mime_type = new MimetypesFileTypeMap().getContentType(file);
			// 文件大小
			if (file != null) {
				this.doc_size = file.length();
			} else {
				this.doc_size = Long.valueOf(0);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * 构造函数
	 */
	public FileInfo(String filePath) {
		try {
			File file = new File(filePath); // 文件
			/*// 赋值
			this.file_id = AtlpUtil.getUUID(); // 附件ID
*/			this.file = file; // 附件内容
			this.blob_content = this.getBytes(); // 文件内容
			this.file_name = file.getName(); // 附件名称
			this.content_type = file_name.substring(file_name.lastIndexOf(".") + 1); // 文档类型
			this.mime_type = new MimetypesFileTypeMap().getContentType(file); // 文件mime类型
			// 文件大小
			if (file != null) {
				this.doc_size = file.length();
			} else {
				this.doc_size = Long.valueOf(0);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public void setFile_id(String file_id) {
		this.file_id = file_id;
	}

	public String getFile_id() {
		return file_id;
	}

	public void setFile_name(String file_name) {
		this.file_name = file_name;
	}

	public String getFile_name() {
		return file_name;
	}

	public void setMime_type(String mime_type) {
		this.mime_type = mime_type;
	}

	public String getMime_type() {
		return mime_type;
	}

	public void setDoc_size(long doc_size) {
		this.doc_size = doc_size;
	}

	public long getDoc_size() {
		return doc_size;
	}

	public void setContent_type(String content_type) {
		this.content_type = content_type;
	}

	public String getContent_type() {
		return content_type;
	}

	public void setBlob_content(byte[] blob_content) {
		this.blob_content = blob_content;
	}

	public byte[] getBlob_content() {
		return blob_content;
	}

	public void setFile(File file) {
		this.file = file;
	}

	public File getFile() {
		return file;
	}

	/**
	 * 获取当前文件的byte数组
	 */
	@SuppressWarnings("oracle.jdeveloper.java.nested-assignment")
	public byte[] getBytes() throws IOException {
		byte[] bc = null;
		try {
			ByteArrayOutputStream bos = new ByteArrayOutputStream();
			FileInputStream finstream;
			finstream = new FileInputStream(getFile());
			byte buffer[] = new byte[1024];
			int len = 0;
			while ((len = finstream.read(buffer, 0, 1024)) > 0) {
				bos.write(buffer, 0, len);
			}
			bc = bos.toByteArray();
			bos.close();
			finstream.close();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
		return bc;
	}
}
